package com.sybil.ot.dominio;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "SIL_DEFECTOS_PARO_OT")
public class DefectoParo implements Serializable {

   private static final long serialVersionUID = 1L;
   protected DefectoParoPK llave;
   private String comentarios;
   private String usuarioCreo;
   private String usuarioModif;
   private OrdenTrabajo ordenTrabajo;
   private Defecto defecto;
   private CausaParo causa;
   private Accion accion;

   public DefectoParo() {
   }

   public DefectoParo(DefectoParoPK llave) {
      this.llave = llave;
   }

   public DefectoParo(String serieOT, int numeroOT, int numeroDefecto) {
      this.llave = new DefectoParoPK(serieOT, numeroOT, numeroDefecto);
   }

   public DefectoParo(DefectoParoPK llave, String comentarios) {
      this.llave = llave;
      this.comentarios = comentarios;
   }

   @EmbeddedId
   public DefectoParoPK getLlave() {
      return llave;
   }

   public void setLlave(DefectoParoPK llave) {
      this.llave = llave;
   }

   @Column(name = "DPOT_COMENTARIOS")
   public String getComentarios() {
      return comentarios;
   }

   public void setComentarios(String comentarios) {
      this.comentarios = comentarios;
   }

   @JoinColumns({
      @JoinColumn(name = "DPOT_ORTR_SERIE", referencedColumnName = "ORTR_SERIE", insertable = false, updatable = false),
      @JoinColumn(name = "DPOT_ORTR_NUMERO", referencedColumnName = "ORTR_NUMERO", insertable = false, updatable = false)})
   @ManyToOne(optional = false, fetch = FetchType.LAZY)
   public OrdenTrabajo getOrdenTrabajo() {
      return ordenTrabajo;
   }

   public void setOrdenTrabajo(OrdenTrabajo ordenTrabajo) {
      this.ordenTrabajo = ordenTrabajo;
   }

   @NotNull
   @Valid
   @JoinColumn(name = "DPOT_DEOT_CLAVE", referencedColumnName = "DEOT_CLAVE")
   @ManyToOne(optional = false, fetch = FetchType.LAZY)
   public Defecto getDefecto() {
      return defecto;
   }

   public void setDefecto(Defecto defecto) {
      this.defecto = defecto;
   }

   @NotNull
   @Valid
   @JoinColumn(name = "DPOT_CPOT_CLAVE", referencedColumnName = "CPOT_CLAVE")
   @ManyToOne(optional = false, fetch = FetchType.LAZY)
   public CausaParo getCausa() {
      return causa;
   }

   public void setCausa(CausaParo causa) {
      this.causa = causa;
   }

   @NotNull
   @Valid
   @JoinColumn(name = "DPOT_ACOT_CLAVE", referencedColumnName = "ACOT_CLAVE")
   @ManyToOne(optional = false, fetch = FetchType.LAZY)
   public Accion getAccion() {
      return accion;
   }

   public void setAccion(Accion accion) {
      this.accion = accion;
   }

   @Basic(optional = false)
   @Column(name = "DPOT_USUARIO_CREO")
   public String getUsuarioCreo() {
      return usuarioCreo;
   }

   public void setUsuarioCreo(String usuarioCreo) {
      this.usuarioCreo = usuarioCreo;
   }

   @Column(name = "DPOT_USUARIO_MODIF")
   public String getUsuarioModif() {
      return usuarioModif;
   }

   public void setUsuarioModif(String usuarioModif) {
      this.usuarioModif = usuarioModif;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (llave != null ? llave.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      if (!(object instanceof DefectoParo)) {
         return false;
      }
      DefectoParo other = (DefectoParo) object;
      if ((this.llave == null && other.llave != null) || (this.llave != null && !this.llave.equals(other.llave))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "DefectoParo[ llave=" + llave + " ]";
   }
}
